home *** CD-ROM | disk | FTP | other *** search
/ Cre@te Online 2000 December / Cre@teOnline CD05.iso / MacSoft / XML ConsoleMax.sea / XML ConsoleMax / Required / swingall.jar / javax / swing / text / html / StyleSheet$CssParser.class (.txt) < prev    next >
Encoding:
Java Class File  |  1999-07-15  |  5.8 KB  |  261 lines

  1. package javax.swing.text.html;
  2.  
  3. import java.io.IOException;
  4. import java.io.Reader;
  5. import java.io.Serializable;
  6. import java.io.StreamTokenizer;
  7. import java.io.StringReader;
  8. import java.net.MalformedURLException;
  9. import java.net.URL;
  10. import java.util.Vector;
  11. import javax.swing.text.AttributeSet;
  12. import javax.swing.text.MutableAttributeSet;
  13. import javax.swing.text.SimpleAttributeSet;
  14.  
  15. class StyleSheet$CssParser implements Serializable {
  16.    // $FF: synthetic field
  17.    private final StyleSheet this$0;
  18.    Vector selectors;
  19.    Vector selectorTokens;
  20.    String key;
  21.    Vector ruleTokens;
  22.    MutableAttributeSet declaration;
  23.    boolean parsingDeclaration;
  24.    boolean isLink;
  25.    URL base;
  26.  
  27.    StyleSheet$CssParser(StyleSheet var1) {
  28.       this.this$0 = var1;
  29.       this.selectors = new Vector();
  30.       this.selectorTokens = new Vector();
  31.       this.ruleTokens = new Vector();
  32.       this.declaration = new SimpleAttributeSet();
  33.    }
  34.  
  35.    void addImport(String var1) {
  36.       if (var1.startsWith("url(") && var1.endsWith(")")) {
  37.          try {
  38.             URL var5 = new URL(var1.substring(4, var1.length() - 1));
  39.             if (var5 != null) {
  40.                this.this$0.importStyleSheet(var5);
  41.             }
  42.          } catch (MalformedURLException var4) {
  43.          }
  44.       } else if (this.base != null) {
  45.          try {
  46.             URL var2 = new URL(this.base, var1);
  47.             if (var2 != null) {
  48.                this.this$0.importStyleSheet(var2);
  49.             }
  50.          } catch (MalformedURLException var3) {
  51.          }
  52.       }
  53.  
  54.    }
  55.  
  56.    void addKeyValueToDeclaration() {
  57.       CSS.Attribute var1 = CSS.getAttribute(this.key);
  58.       if (var1 != null) {
  59.          Object var2 = this.getValue(var1);
  60.          if (var2 != null) {
  61.             this.declaration.addAttribute(var1, var2);
  62.          }
  63.       }
  64.  
  65.       this.ruleTokens.removeAllElements();
  66.    }
  67.  
  68.    void addRule() {
  69.       if (this.parsingDeclaration) {
  70.          throw new RuntimeException("Declaration should not contain rules");
  71.       } else {
  72.          int var1 = this.selectors.size();
  73.  
  74.          for(int var2 = 0; var2 < var1; ++var2) {
  75.             String[] var3 = (String[])this.selectors.elementAt(var2);
  76.             if (var3.length > 0) {
  77.                this.this$0.addRule(var3, this.declaration, this.isLink);
  78.             }
  79.          }
  80.  
  81.          this.declaration.removeAttributes(this.declaration);
  82.          this.selectors.removeAllElements();
  83.       }
  84.    }
  85.  
  86.    void addSelector() {
  87.       String[] var1 = new String[this.selectorTokens.size()];
  88.       this.selectorTokens.copyInto(var1);
  89.       this.selectors.addElement(var1);
  90.       this.selectorTokens.removeAllElements();
  91.    }
  92.  
  93.    String getDeclarationString() {
  94.       String var1 = "";
  95.       int var2 = this.ruleTokens.size();
  96.  
  97.       for(int var3 = 0; var3 < var2; ++var3) {
  98.          var1 = var1 + this.ruleTokens.elementAt(var3);
  99.       }
  100.  
  101.       this.ruleTokens.removeAllElements();
  102.       return var1;
  103.    }
  104.  
  105.    Object getValue(CSS.Attribute var1) {
  106.       return StyleSheet.access$0(this.this$0).getInternalCSSValue(var1, this.getDeclarationString());
  107.    }
  108.  
  109.    void parse(URL var1, Reader var2, boolean var3, boolean var4) throws IOException {
  110.       this.base = var1;
  111.       this.isLink = var4;
  112.       this.declaration.removeAttributes(this.declaration);
  113.       this.selectorTokens.removeAllElements();
  114.       this.selectors.removeAllElements();
  115.       this.ruleTokens.removeAllElements();
  116.       this.parsingDeclaration = var3;
  117.       StreamTokenizer var5 = new StreamTokenizer(var2);
  118.       var5.ordinaryChar(47);
  119.       var5.slashStarComments(true);
  120.       var5.wordChars(35, 35);
  121.       boolean var6 = var3;
  122.       boolean var7 = false;
  123.       boolean var8 = false;
  124.       boolean var9 = false;
  125.       StringBuffer var10 = null;
  126.       boolean var11 = false;
  127.       char[] var12 = new char[1];
  128.  
  129.       for(int var13 = var5.nextToken(); var13 != -1; var13 = var5.nextToken()) {
  130.          switch (var13) {
  131.             case -3:
  132.                if (var7) {
  133.                   if (var8) {
  134.                      var10.append(var5.sval);
  135.                   } else if (var5.sval.equals("import")) {
  136.                      var8 = true;
  137.                      if (var10 == null) {
  138.                         var10 = new StringBuffer();
  139.                      } else {
  140.                         var10.setLength(0);
  141.                      }
  142.                   }
  143.                } else if (var6) {
  144.                   this.ruleTokens.addElement(var5.sval);
  145.                } else {
  146.                   if (var11) {
  147.                      this.selectorTokens.addElement('.' + var5.sval);
  148.                   } else {
  149.                      this.selectorTokens.addElement(var5.sval);
  150.                   }
  151.  
  152.                   var9 = true;
  153.                }
  154.  
  155.                var11 = false;
  156.                break;
  157.             case -2:
  158.                var11 = false;
  159.                if (var7) {
  160.                   if (var8) {
  161.                      var10.append(var5.nval);
  162.                   }
  163.                } else if (var6) {
  164.                   this.ruleTokens.addElement(new Integer((int)var5.nval));
  165.                } else if (var5.nval == (double)0.0F) {
  166.                   var11 = true;
  167.                } else {
  168.                   String var14 = (String)this.selectorTokens.lastElement();
  169.                   var14 = var14 + (int)var5.nval;
  170.                   this.selectorTokens.setElementAt(var14, this.selectorTokens.size() - 1);
  171.                   var9 = true;
  172.                }
  173.             case 10:
  174.                break;
  175.             default:
  176.                var11 = false;
  177.                if (var7) {
  178.                   if (var5.ttype == 59) {
  179.                      var7 = false;
  180.                      if (var8) {
  181.                         if (!var9) {
  182.                            this.addImport(var10.toString());
  183.                         }
  184.  
  185.                         var8 = false;
  186.                      }
  187.                   } else if (var8) {
  188.                      if (var5.ttype != 39 && var5.ttype != 34) {
  189.                         var10.append((char)var5.ttype);
  190.                      } else {
  191.                         var10.append(var5.sval);
  192.                      }
  193.                   }
  194.                } else {
  195.                   switch (var5.ttype) {
  196.                      case 44:
  197.                         if (var6) {
  198.                            this.ruleTokens.addElement(new Character(','));
  199.                         } else {
  200.                            this.addSelector();
  201.                         }
  202.                         break;
  203.                      case 58:
  204.                         this.key = this.getDeclarationString();
  205.                         break;
  206.                      case 59:
  207.                         this.addKeyValueToDeclaration();
  208.                         break;
  209.                      case 64:
  210.                         var7 = true;
  211.                         var8 = false;
  212.                         break;
  213.                      case 123:
  214.                         var9 = true;
  215.                         this.addSelector();
  216.                         var6 = true;
  217.                         break;
  218.                      case 125:
  219.                         if (this.ruleTokens.size() > 0) {
  220.                            this.addKeyValueToDeclaration();
  221.                         }
  222.  
  223.                         this.addRule();
  224.                         var6 = false;
  225.                         break;
  226.                      default:
  227.                         if (var6) {
  228.                            this.ruleTokens.addElement(new Character(','));
  229.                         } else if (this.selectorTokens.size() == 0) {
  230.                            var12[0] = (char)var5.ttype;
  231.                            this.selectorTokens.addElement(new String(var12));
  232.                         } else {
  233.                            String var16 = (String)this.selectorTokens.lastElement();
  234.                            var16 = var16 + (char)var5.ttype;
  235.                            this.selectorTokens.setElementAt(var16, this.selectorTokens.size() - 1);
  236.                         }
  237.                   }
  238.                }
  239.          }
  240.       }
  241.  
  242.       if (this.parsingDeclaration && this.ruleTokens.size() > 0) {
  243.          this.addKeyValueToDeclaration();
  244.       }
  245.  
  246.    }
  247.  
  248.    AttributeSet parseDeclaration(Reader var1) throws IOException {
  249.       this.parse(this.base, var1, true, false);
  250.       return this.declaration.copyAttributes();
  251.    }
  252.  
  253.    AttributeSet parseDeclaration(String var1) {
  254.       try {
  255.          return this.parseDeclaration((Reader)(new StringReader(var1)));
  256.       } catch (IOException var2) {
  257.          return null;
  258.       }
  259.    }
  260. }
  261.